﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Logic.Linq;
using Crosland.Automotriz.Core;
using System.Drawing;
using System.Configuration;
using Microsoft.Reporting.WebForms;
using DevExpress.Web.ASPxGridView;
using System.IO;
using System.Text;
using System.Web.UI.HtmlControls;
using DevExpress.XtraPrinting;
using DevExpress.XtraPrintingLinks;
using Crosland.Automotriz.Logic.ControlExeption;
using System.Data;
using System.Net;
using System.Security.Principal;
namespace Crosland.Automotriz.Web.Repuestos
{
    public partial class wFrmPronosticoImportacionActualizar : System.Web.UI.Page
    {
        string idNegocio = ConfigurationManager.AppSettings["Negocio"];
        static DataTable ds = new DataTable();
        static DataTable dt_TablaArticulosImportados = new DataTable();
        private static String RutaExcel = "";
        private static String RutaExcel_ArticulosImport = "";
        private static clsTD_MaterialLogic cls_materialLogic = null;
        private static ActualizarPedidoLogic clsPronostico_det = null;
        private static List<TmpRegistrosNoInsertados> tmpArticulosNoInsertados;



        protected void Page_Load(object sender, EventArgs e)
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("es-ES");
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ES");

            if (Page.IsPostBack == false)
            {
            
                Panel img = (Panel)Master.FindControl("asp");
                img.Visible = false;
            }

            if (!IsPostBack)
            {
                tmpArticulosNoInsertados = new List<TmpRegistrosNoInsertados>();
                this.TablaTemporalArticulosImportados();
                lblTitulo.Text = "- Nro.Pronóstico: " + Session["nro_pronostico"].ToString() + "   Fecha de pedido: " + Convert.ToDateTime(Session["FECHA_GEN"]).ToShortDateString();

            }
            this.Cargar_Detalle();

        }

        private void Cargar_Detalle()
        {
            try
            {
                ActualizarPedidoLogic actualizapedido = new ActualizarPedidoLogic();
                dgDetallePedido.DataSource = actualizapedido.listar(Convert.ToInt32(Session["nro_pronostico"]));
                dgDetallePedido.DataBind();
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "Cargar_Detalle");
                MensajesError(ex.Message, ex, "Cargar_Detalle");

            }
            catch (RunException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "Cargar_Detalle");
                MensajesError(ex.Message, ex, "Cargar_Detalle");
            }

        }

        private void Cargar_GrillaExcel()
        {

            try
            {
                ActualizarPedidoLogic actualizapedido = new ActualizarPedidoLogic();
                gvExportarExcel2.DataSource = actualizapedido.listar(Convert.ToInt32(Session["nro_pronostico"]));
                gvExportarExcel2.DataBind();
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "Cargar_GrillaExcel");
                MensajesError(ex.Message, ex, "Cargar_GrillaExcel");

            }
            catch (RunException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "Cargar_GrillaExcel");
                MensajesError(ex.Message, ex, "Cargar_GrillaExcel");
            }




        }

        protected void ImageButton2_Click(object sender, ImageClickEventArgs e)
        {
            dgvExportar.WriteXlsToResponse();
        }

        protected void btnsal_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Repuestos/wFrmPronosticoImportacion.aspx?id=" + idNegocio);
        }

        protected void btnexport_Click(object sender, EventArgs e)
        {
            //Cargar_GrillaExcel();
            //dgvExportar.WriteXlsToResponse();

            int nroPronostico = Convert.ToInt32(Session["nro_pronostico"]);


            this.rvPopupReporte.ProcessingMode = ProcessingMode.Remote;
            this.rvPopupReporte.ShowCredentialPrompts = true;
            this.rvPopupReporte.ShowExportControls = true;
            this.rvPopupReporte.ServerReport.ReportServerCredentials = new RSCredentials();
            this.rvPopupReporte.ServerReport.ReportServerUrl =
                new Uri(ConfigurationManager.AppSettings[DatosConfiguracion.RsServer]);
            this.rvPopupReporte.ServerReport.ReportPath = "/SAP_Repuestos/rs_Rep_PedidoImportacion";

            ReportParameter parameter = new ReportParameter("nro_pronostico", nroPronostico.ToString());

            this.rvPopupReporte.ServerReport.SetParameters(parameter);

        }

        private void cargar_Grid(string filePath)
        {
            try
            {
                System.Data.OleDb.OleDbConnectionStringBuilder builder = new System.Data.OleDb.OleDbConnectionStringBuilder();
                builder.DataSource = filePath;

                if (Path.GetExtension(filePath).ToUpper() == ".XLS")
                {
                    builder.Provider = "Microsoft.ACE.OLEDB.12.0";
                    builder.Add("Extended Properties", "Excel 8.0;HRD=Yes;IMEX=1");
                }
                else if (Path.GetExtension(filePath).ToUpper() == ".XLSX")
                {
                    builder.Provider = "Microsoft.ACE.OLEDB.12.0";
                    builder.Add("Extended Properties", "Excel 12.0;HRD=Yes;IMEX=1");
                }
                System.Data.OleDb.OleDbConnection oledbConn = new System.Data.OleDb.OleDbConnection(builder.ConnectionString);
                string strSQL = "SELECT IdMaterial,[cant sug real] FROM [rs_Rep_PedidoImportacion$] where IdMaterial is not null ";
                System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(strSQL, oledbConn);
                System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(cmd);
                da.Fill(ds);
                oledbConn.Close();

            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "cargar_Grid");
                MensajesError(ex.Message, ex, "cargar_Grid");

            }

        }

        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }

        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException e)
            {

                MensajesError(e.Message, e, "GuardarExceptionLog");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "GuardarExceptionLog");
            }

        }

        protected void ucCargarExcel_FileUploadComplete1(object sender, DevExpress.Web.ASPxUploadControl.FileUploadCompleteEventArgs e)
        {
            if (e.IsValid)
            {
                string filePath = Server.MapPath("~/Archivos Excel/" + e.UploadedFile.FileName);
                e.UploadedFile.SaveAs(filePath);
                RutaExcel = filePath;
            }
        }

        private void ActualizarExcel()
        {

            try
            {
                Boolean bretorno = false;

                foreach (DataRow row in ds.Rows)
                {
                    ActualizarPedidoLogic Actualiza = new ActualizarPedidoLogic();

                    int nroPronostico = Convert.ToInt32(Session["nro_pronostico"]);
                    int idMaterial = Convert.ToInt32(row["IdMaterial"]);
                    decimal canSugReal;
                    //Convert.ToDecimal(row["cant sug real"]);

                    if (String.IsNullOrEmpty(row["cant sug real"].ToString()))
                    {
                        canSugReal = 0;
                    }

                    else
                    {
                        canSugReal = Convert.ToDecimal(row["cant sug real"]);
                    }

                    bretorno = Actualiza.Actualizar_Cantidad_Sugerida_Real(nroPronostico, idMaterial, canSugReal);

                }

                if (bretorno)
                {
                    lblmsj.Text = "Se importo correctamente";
                    PopupMSJGeneral.ShowOnPageLoad = true;
                    return;
                }
            }
            catch (Exception e)
            {
                GuardarExceptionLog(e.Message, e, "ActualizarExcel");
                MensajesError(e.Message, e, "ActualizarExcel");
            }

        }

        protected void btAceptar_Click(object sender, EventArgs e)
        {

            ds.Clear();

            if (RutaExcel.Length == 0)
            {
                lblmsj.Text = "Seleccione un archivo excel";
                PopupMSJGeneral.ShowOnPageLoad = true;
                return;
            }
            else
            {
                cargar_Grid(RutaExcel);
                if (ds.Rows.Count > 0)
                {
                    this.ActualizarExcel();
                    Cargar_Detalle();
                }
            }
        }



        private void RecuperarDatosSession()
        {
            try
            {

                ActualizarPedidoLogic Actualiza = new ActualizarPedidoLogic();
                int indexF = dgDetallePedido.FocusedRowIndex;
                int Nro_pronostico = Convert.ToInt32(Session["nro_pronostico"]);
                int ID_MATERIAL = Convert.ToInt32(dgDetallePedido.GetRowValues(indexF, "id_material").ToString());

                lblPerioinicial.Text = string.Empty;
                lblPeriodoFinal.Text = string.Empty;

                lblPerioinicial.Text = Session["ANO_MES_INI"].ToString();
                lblPeriodoFinal.Text = Session["ANO_MES_FIN"].ToString();

                lblPSMcantidad.Text = Convert.ToString(Actualiza.ListarTextoTotal(Nro_pronostico, ID_MATERIAL));
               // lblPSMcantidad0.Text = Convert.ToString(Actualiza.ListarTextoTotal(Nro_pronostico, ID_MATERIAL));


                lblCantidadSugerida.Text = String.Format("{0:0.00}", dgDetallePedido.GetRowValues(indexF, "cant_sugerida"));
                lblCantidadSugerida0.Text = String.Format("{0:0.00}", dgDetallePedido.GetRowValues(indexF, "cant_sugerida"));
                lblPSD.Text = Convert.ToString(dgDetallePedido.GetRowValues(indexF, "psd"));
                lblPSD0.Text = Convert.ToString(dgDetallePedido.GetRowValues(indexF, "psd"));
                lblCantidadStock.Text = String.Format("{0:0}", dgDetallePedido.GetRowValues(indexF, "can_stock"));
                lblCantidadStock0.Text = String.Format("{0:0}", dgDetallePedido.GetRowValues(indexF, "can_stock"));
                lblCantidadTransito.Text = String.Format("{0:0}", dgDetallePedido.GetRowValues(indexF, "can_transito"));
                lblCantidadTransito0.Text = String.Format("{0:0}", dgDetallePedido.GetRowValues(indexF, "can_transito"));
                lblPSM.Text = String.Format("{0:0.00}", dgDetallePedido.GetRowValues(indexF, "psm"));
                lblPSM0.Text = String.Format("{0:0.00}", dgDetallePedido.GetRowValues(indexF, "psm"));

                lblPeriodosSalidaStock.Text = string.Format("{0:0}", Actualiza.PronosticoImportacionNroDiasReposicion(Nro_pronostico, Convert.ToString(dgDetallePedido.GetRowValues(indexF, "TIPO_ABC"))));
                lblPeriodosSalidaStock0.Text = string.Format("{0:0}", Actualiza.PronosticoImportacionNroDiasReposicion(Nro_pronostico, Convert.ToString(dgDetallePedido.GetRowValues(indexF, "TIPO_ABC"))));
                ls.Text = Convert.ToString(dgDetallePedido.GetRowValues(dgDetallePedido.FocusedRowIndex, "can_stock"));
                lpf.Text = Session["ANO_MES_FIN"].ToString();
                Lsi.Text = Session["ANO_MES_INI"].ToString();
                string numero_meses = Convert.ToString(Actualiza.countflag(Nro_pronostico, ID_MATERIAL));
                lblNumeroMeses.Text = numero_meses;

                lblNumeroMeses0.Text = Actualiza.obtenerMeses(Nro_pronostico.ToString()).ToString();


            }
            catch (Exception e)
            {
                GuardarExceptionLog(e.Message, e, "RecuperarDatosSession");
                MensajesError(e.Message, e, "RecuperarDatosSession");
            }
        }

        protected void btnSituacionItem_Click(object sender, EventArgs e)
        {
            if (dgDetallePedido.FocusedRowIndex == -1)
            {
                lblmsj.Text = "Seleccioné un registro.";
                PopupMSJGeneral.ShowOnPageLoad = true;
                return;
            }

            String COD_MATERIAL = dgDetallePedido.GetRowValues(dgDetallePedido.FocusedRowIndex, "COD_MATERIAL").ToString();
            String ID_MATERIAL = dgDetallePedido.GetRowValues(dgDetallePedido.FocusedRowIndex, "id_material").ToString();
            Session["CODIGO_MATERIAL"] = COD_MATERIAL;
            Session["ID_MATERIAL"] = ID_MATERIAL;
            popupReporte.ShowOnPageLoad = true;

        }

        protected void btnMostrar_Click(object sender, EventArgs e)
        {
            if (dgDetallePedido.FocusedRowIndex == -1)
            {
                lblmsj.Text = "Seleccioné un registro.";
                PopupMSJGeneral.ShowOnPageLoad = true;
                return;
            }
            this.Mostrar();
        }

        private void Mostrar()
        {

            try
            {
                ActualizarPedidoLogic Actualiza = new ActualizarPedidoLogic();
                string tipoABC = Convert.ToString(dgDetallePedido.GetRowValues(dgDetallePedido.FocusedRowIndex, "TIPO_ABC")).ToLower();
                if (tipoABC == "a" || tipoABC == "b") 
                {
                    RPFormula_A_B.ClientVisible = true; 
                }
                else {
                    RPFormula_C_N_O.ClientVisible = true; 
                }

                int Nro_pronostico = Convert.ToInt32(Session["nro_pronostico"]);
                int ID_MATERIAL = Convert.ToInt32(dgDetallePedido.GetRowValues(dgDetallePedido.FocusedRowIndex, "id_material").ToString());
                lblTotalCan.Text = Convert.ToString(Actualiza.ListarTextoTotal(Nro_pronostico, ID_MATERIAL));
                lblMax.Text = Convert.ToString(Actualiza.countflag(Nro_pronostico, ID_MATERIAL));
                lblTotalPromedioDias.Text = String.Format("{0:0.00}", Actualiza.total_general(Nro_pronostico, ID_MATERIAL));
                lblCant_vta.Text = Convert.ToString(Actualiza.can_vta(Nro_pronostico, ID_MATERIAL));
                lblPSMcantidad0.Text = lblCant_vta.Text;
                lblTotalCNO.Text = String.Format("{0:0.00}", Actualiza.totalCNO(Nro_pronostico, ID_MATERIAL));
                int intNumDiasDiaria = ((Convert.ToInt32(Session["ANO_FIN"]) - Convert.ToInt32(Session["ANO_INI"])) + 1) * 30;
                lblNum_vta.Text = intNumDiasDiaria.ToString();
                this.RecuperarDatosSession();
                dgPronostico.DataSource = Actualiza.ListarPronostico(Nro_pronostico, ID_MATERIAL);
                dgPronostico.DataBind();
                PopupMostrarAna.ShowOnPageLoad = true;
            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "Mostrar");
                MensajesError(ex.Message, ex, "Mostrar");
            }
            catch (RunException exe)
            {
                GuardarExceptionLog(exe.Message, exe, "Mostrar");
                MensajesError(exe.Message, exe, "Mostrar");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog("Error no controlado en la aplicación", ex, "Mostrar");
                MensajesError("Error no controlado en la aplicación", ex, "Mostrar");

            }

        }

        protected void dgPronostico_HtmlRowPrepared(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewTableRowEventArgs e)
        {
            if (e.RowType != GridViewRowType.Data) return;
            int ind_flag = Convert.ToInt32(e.GetValue("IND_MAX"));
            if (ind_flag == 1)
                e.Row.BackColor = Color.LightPink;

        }

        protected void dgPronostico_AfterPerformCallback(object sender, ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            try
            {
                ActualizarPedidoLogic Actualiza = new ActualizarPedidoLogic();
                int Nro_pronostico = Convert.ToInt32(Session["nro_pronostico"]);
                int ID_MATERIAL = Convert.ToInt32(dgDetallePedido.GetRowValues(dgDetallePedido.FocusedRowIndex, "id_material").ToString());
                dgPronostico.DataSource = Actualiza.ListarPronostico(Nro_pronostico, ID_MATERIAL);
                dgPronostico.DataBind();
            }
            catch (Exception exe)
            {
                GuardarExceptionLog(exe.Message, exe, "dgPronostico_AfterPerformCallback");
                MensajesError(exe.Message, exe, "dgPronostico_AfterPerformCallback");
            }

        }

        protected void POP_btnImportarArticulos_Click(object sender, EventArgs e)
        {
            dt_TablaArticulosImportados.Clear();

            if (UC_ImportarArticulos.FileName.Length == 0)
            {
                PC_ImportarArticulos.ShowOnPageLoad = false;
                lblmsj.Text = string.Empty;
                lblmsj.Text = "Seleccione un archivo excel";
                PopupMSJGeneral.ShowOnPageLoad = true;
                return;
            }
            else
            {
                CargaExcelArticulosImportados(RutaExcel_ArticulosImport);
                if (dt_TablaArticulosImportados.Rows.Count > 0)
                {
                    this.ImportarArticulos();
                    PC_ImportarArticulos.ShowOnPageLoad = false;
                    this.Cargar_Detalle();
                    RutaExcel_ArticulosImport = String.Empty;

                }
            }
        }



        private void ImportarArticulos()
        {

            try
            {
                tmpArticulosNoInsertados.Clear();

                clsImportacionesLogic ImportacionBL = new clsImportacionesLogic();
                int i = 0;
                int totalArticulosNoRegistrados = 0;
                int totalArticulosRegistrados = 0;
                int totalArticulosExistentes = 0;
                while (i <= grdDatosArticulosImportados.VisibleRowCount - 1)
                {

                    try
                    {
                        cls_materialLogic = new clsTD_MaterialLogic();
                        String cod_material = grdDatosArticulosImportados.GetRowValues(i, "Codigo").ToString();
                        int flag_id_material = ImportacionBL.RetorIDMaterial(cod_material);
                        if (flag_id_material == 0)
                        {
                            cls_materialLogic.Insert_T_MATERIAL_POR_ASIGNAR(cod_material, grdDatosArticulosImportados.GetRowValues(i, "Descripcion").ToString());
                            totalArticulosNoRegistrados = totalArticulosNoRegistrados + 1;

                            TmpRegistrosNoInsertados registro = new TmpRegistrosNoInsertados() { cod_material = cod_material, descripcion = grdDatosArticulosImportados.GetRowValues(i, "Descripcion").ToString(), cantidad = Convert.ToString(grdDatosArticulosImportados.GetRowValues(i, "Cantidad")) == "" ? 0 : Convert.ToDecimal(grdDatosArticulosImportados.GetRowValues(i, "Cantidad")), fob_unit = Convert.ToString(grdDatosArticulosImportados.GetRowValues(i, "FOB_UNIT")) == "" ? 0 : Convert.ToDecimal(grdDatosArticulosImportados.GetRowValues(i, "FOB_UNIT")), caja = "", tipo_pronostico = grdDatosArticulosImportados.GetRowValues(i, "TIPO_PRONOSTICO").ToString() };
                            tmpArticulosNoInsertados.Add(registro);
                        }
                        else
                        {
                            int id_material = ImportacionBL.RetorIDMaterial(cod_material);
                            int intContador = ImportacionBL.Verificacion(Convert.ToInt32(Session["nro_pronostico"]), id_material);
                            if (intContador == 0)
                            {
                                List<T_MATERIAL_TIPO> m = cls_materialLogic.ListaMaterialxId(id_material);
                                String tipo_abc = String.Empty;
                                String tipo_abc_can = String.Empty;
                                if (m != null)
                                {
                                    tipo_abc = m[0].TIPO_ABC;
                                    tipo_abc_can = m[0].TIPO_ABC_CAN;
                                }
                                decimal cant_sug_real = Convert.ToString(grdDatosArticulosImportados.GetRowValues(i, "Cantidad")) == "" ? 0 : Convert.ToDecimal(grdDatosArticulosImportados.GetRowValues(i, "Cantidad"));
                                decimal cant_sug = Convert.ToString(grdDatosArticulosImportados.GetRowValues(i, "Cantidad")) == "" ? 0 : Convert.ToDecimal(grdDatosArticulosImportados.GetRowValues(i, "Cantidad"));
                                int ID_PRONOSTICO_TIPO = ImportacionBL.RetorIDTipoPronostico(grdDatosArticulosImportados.GetRowValues(i, "TIPO_PRONOSTICO").ToString());
                                decimal FOB_ME = Convert.ToString(grdDatosArticulosImportados.GetRowValues(i, "FOB_UNIT")) == "" ? 0 : Convert.ToDecimal(grdDatosArticulosImportados.GetRowValues(i, "FOB_UNIT"));
                                ImportacionBL.InsertarArticulosExcel(Convert.ToInt32(Session["nro_pronostico"]), id_material, cant_sug_real, cant_sug, FOB_ME, ID_PRONOSTICO_TIPO, tipo_abc, tipo_abc_can);
                                totalArticulosRegistrados = totalArticulosRegistrados + 1;
                            }
                            else
                            {

                                totalArticulosExistentes = totalArticulosExistentes + 1;
                            }
                        }

                        i = i + 1;
                    }
                    catch (Exception ex)
                    {

                        throw ex;
                    }
                }


                if (tmpArticulosNoInsertados.Count > 0)
                {
                    lblMsjDetalleRegistro.ClientVisible = true;
                    if (totalArticulosNoRegistrados != 0)
                    {
                        hplArticulosNoRegistrado.ClientVisible = true;
                    }
                    lblMsjDetalleRegistro.Text = "Artículos no registrados : " + totalArticulosNoRegistrados + "\n" + "Artículos registrados : " + totalArticulosRegistrados + "\n" + "Artículos que existen : " + totalArticulosExistentes;
                    lblmsj.Text = "Se importó parcialmente";
                }
                else { lblmsj.Text = "Se importó correctamente"; }
                PopupMSJGeneral.ShowOnPageLoad = true;

            }
            catch (Crosland.Automotriz.Logic.ControlExeption.DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ImportarArticulos");
                MensajesError(ex.Message, ex, "ImportarArticulos");
            }
            catch (RunException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "ImportarArticulos");
                MensajesError(ex.Message, ex, "ImportarArticulos");
            }
            catch (Exception ex)
            {

                GuardarExceptionLog("Error en la aplicación", ex, "ImportarArticulos");
                MensajesError("Error en la aplicación", ex, "ImportarArticulos");
            }
        }





        private void TablaTemporalArticulosImportados()
        {
            dt_TablaArticulosImportados.Columns.Clear();
            System.Data.DataColumn codigo = new System.Data.DataColumn();
            codigo.DataType = System.Type.GetType("System.String");
            codigo.ColumnName = "Codigo";
            System.Data.DataColumn descripcion = new System.Data.DataColumn();
            descripcion.DataType = System.Type.GetType("System.String");
            descripcion.ColumnName = "Descripcion";
            System.Data.DataColumn cantidad = new System.Data.DataColumn();
            cantidad.DataType = System.Type.GetType("System.Decimal");
            cantidad.ColumnName = "Cantidad";
            System.Data.DataColumn fobme = new System.Data.DataColumn();
            fobme.DataType = System.Type.GetType("System.Decimal");
            fobme.ColumnName = "FOB_UNIT";
            System.Data.DataColumn tipoPronostico = new System.Data.DataColumn();
            tipoPronostico.DataType = System.Type.GetType("System.String");
            tipoPronostico.ColumnName = "TIPO_PRONOSTICO";
            System.Data.DataColumn total = new System.Data.DataColumn();
            total.DataType = System.Type.GetType("System.Decimal");
            total.ColumnName = "Total";
            total.Expression = "Cantidad * FOB_UNIT";
            System.Data.DataColumn caja = new System.Data.DataColumn();
            caja.DataType = System.Type.GetType("System.String");
            caja.ColumnName = "Caja";
            dt_TablaArticulosImportados.Columns.Add(codigo);
            dt_TablaArticulosImportados.Columns.Add(descripcion);
            dt_TablaArticulosImportados.Columns.Add(cantidad);
            dt_TablaArticulosImportados.Columns.Add(fobme);
            dt_TablaArticulosImportados.Columns.Add(total);
            dt_TablaArticulosImportados.Columns.Add(caja);
            dt_TablaArticulosImportados.Columns.Add(tipoPronostico);
            System.Data.DataRow row = dt_TablaArticulosImportados.NewRow();
            dt_TablaArticulosImportados.Rows.Add(row);
            grdDatosArticulosImportados.DataSource = dt_TablaArticulosImportados;

        }

        private void CargaExcelArticulosImportados(string filePath)
        {

            System.Data.OleDb.OleDbConnection oledbConn = null;
            try
            {
                System.Data.OleDb.OleDbConnectionStringBuilder builder = new System.Data.OleDb.OleDbConnectionStringBuilder();
                builder.DataSource = filePath;

                if (Path.GetExtension(filePath).ToUpper() == ".XLS")
                {
                    builder.Provider = "Microsoft.ACE.OLEDB.12.0";
                    builder.Add("Extended Properties", "Excel 8.0;HRD=Yes;IMEX=1");
                }
                else if (Path.GetExtension(filePath).ToUpper() == ".XLSX")
                {
                    builder.Provider = "Microsoft.ACE.OLEDB.12.0";
                    builder.Add("Extended Properties", "Excel 12.0;HRD=Yes;IMEX=1");
                }

                oledbConn = new System.Data.OleDb.OleDbConnection(builder.ConnectionString);
                const string strSQL = "SELECT CODIGO,DESCRIPCION,CANTIDAD,FOB_UNIT,CAJA,TIPO_PRONOSTICO FROM [Hoja1$] WHERE CODIGO IS NOT NULL";

                System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(strSQL, oledbConn);

                System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(cmd);
                da.Fill(dt_TablaArticulosImportados);
                oledbConn.Close();
                grdDatosArticulosImportados.DataSource = dt_TablaArticulosImportados;
                grdDatosArticulosImportados.DataBind();
                grdDatosArticulosImportados.Visible = true;


            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "CargaExcelArticulosImportados");
                MensajesError(ex.Message, ex, "CargaExcelArticulosImportados");
            }

        }

        private struct TmpRegistrosNoInsertados
        {
            public string cod_material { get; set; }
            public string descripcion { get; set; }
            public decimal cantidad { get; set; }
            public decimal fob_unit { get; set; }
            public string caja { get; set; }
            public string tipo_pronostico { get; set; }

        }

        protected void UC_ImportarArticulos_FileUploadComplete(object sender, DevExpress.Web.ASPxUploadControl.FileUploadCompleteEventArgs e)
        {
            try
            {
                RutaExcel_ArticulosImport = String.Empty;
                if (e.IsValid)
                {
                    string filePath = Server.MapPath("~/Archivos Excel/" + e.UploadedFile.FileName);
                    e.UploadedFile.SaveAs(filePath);
                    RutaExcel_ArticulosImport = filePath;

                }
            }
            catch (Exception exe)
            {
                GuardarExceptionLog(exe.Message, exe, "UC_ImportarArticulos_FileUploadComplete");
                MensajesError(exe.Message, exe, "UC_ImportarArticulos_FileUploadComplete");
            }
        }

        protected void btnFormatoExcel_Click(object sender, EventArgs e)
        {
            this.ListaTablaHerramientas();
            this.ListaTablaRepuestos();
            this.Exportar_A_Excel();
        }


        private void Exportar_A_Excel()
        {
            try
            {
                Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel.Workbook workbook = app.Workbooks.Add(Type.Missing);
                Microsoft.Office.Interop.Excel.Worksheet worksheet = null;
                worksheet = workbook.Sheets["Hoja2"];
                worksheet = workbook.Sheets["Hoja1"];
                worksheet = workbook.ActiveSheet;
               
     
                for (int c = 1; c <= this.grdListaRepuestos.Columns.Count; c++)
                {
                    workbook.Sheets["Hoja1"].Cells[1, c]= grdListaRepuestos.Columns[c - 1].HeaderText;
                }

                for (int c = 0; c <= this.grdListaRepuestos.Rows.Count - 1; c++)
                {
                    for (int d = 0; d <= this.grdListaRepuestos.Columns.Count - 1; d++)
                    {
                        workbook.Sheets["Hoja1"].Cells[c + 2, d + 1] = this.grdListaRepuestos.Rows[c].Cells[d].Text;
                    }
                }

                for (int a = 1; a <= this.grdListaHerramientas.Columns.Count; a++)
                {
                    workbook.Sheets["Hoja2"].Cells[1, a] = this.grdListaHerramientas.Columns[a - 1].HeaderText;
                }
                for (int a = 0; a <= this.grdListaHerramientas.Rows.Count - 1; a++)
                {
                    for (int b = 0; b <= this.grdListaHerramientas.Columns.Count - 1; b++)
                    {
                        workbook.Sheets["Hoja2"].Cells[a + 2, b + 1] = this.grdListaHerramientas.Rows[a].Cells[b].Text;
                    }
                }

                for (int l = 1; l <= 2; l++)
                {
                    string Hoja = "Hoja" + l;
                    workbook.Sheets[Hoja].Rows.Item(1).Font.Bold = 1;
                    workbook.Sheets[Hoja].Rows.Item(1).HorizontalAlignment = 3;
                    workbook.Sheets[Hoja].Columns.AutoFit();
                    workbook.Sheets[Hoja].Columns.HorizontalAlignment = 2;
                }
                workbook.Worksheets["Hoja1"].Name = "Parts";
                workbook.Worksheets["Hoja2"].Name = "Tools";
                workbook.Worksheets["Hoja3"].Delete();
                app.Visible = true;
                app = null;
                workbook = null;
                worksheet = null;
                GC.Collect();
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "Exportar_A_Excel");
                MensajesError(ex.Message, ex, "Exportar_A_Excel");
            }            

        }


        private void DescargaFormto()
        {
            try
            {
                string filepath = Server.MapPath("\\Archivos Excel\\Formato\\Modelo_carga.xlsx");

                if (File.Exists(filepath))
                {
                    string filename = "Modelo_carga.xlsx";
                    Response.Clear();
                    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
                    Response.Flush();
                    Response.WriteFile(filepath);
                    Response.End();
                    Response.Close();
                }
            }
            catch
            {

            }

        }

        private void ListaTablaHerramientas()
        {
            try
            {
                clsPronostico_det = new ActualizarPedidoLogic();
                grdListaHerramientas.DataSource = clsPronostico_det.listaPedidosHerramientas(Convert.ToInt32(Session["nro_pronostico"]));
                grdListaHerramientas.DataBind();
            }
            catch (Exception e)
            {
                GuardarExceptionLog(e.Message, e, "ListaTablaHerramientas");
                MensajesError(e.Message, e, "ListaTablaHerramientas");
            }
        }

        private void ListaTablaRepuestos()
        {
            try
            {
                clsPronostico_det = new ActualizarPedidoLogic();
                grdListaRepuestos.DataSource = clsPronostico_det.listaPedidosRepuestos(Convert.ToInt32(Session["nro_pronostico"]));
                grdListaRepuestos.DataBind();
            }
            catch (Exception e)
            {
                GuardarExceptionLog(e.Message, e, "ListaTablaRepuestos");
                MensajesError(e.Message, e, "ListaTablaRepuestos");
            }

        }

        protected void btnDescargarFormato_Click(object sender, EventArgs e)
        {

            this.DescargaFormto();
        }


        protected void dgDetallePedido_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e)
        {
            ActualizarPedidoLogic Actualiza = new ActualizarPedidoLogic();
            int Nro_Pedido = Convert.ToInt32(Session["nro_pronostico"]);
            int id_material = Convert.ToInt32(dgDetallePedido.GetRowValues(dgDetallePedido.FocusedRowIndex, "id_material"));
            Decimal a = Convert.ToDecimal(e.NewValues["cant_sug_real"]);
            Actualiza.Actualizar_Cantidad_Sugerida_Real(Nro_Pedido, id_material, a);
            Cargar_Detalle();
            e.Cancel = true;
            dgDetallePedido.CancelEdit();
        }

        protected void dgDetallePedido_CustomUnboundColumnData1(object sender, ASPxGridViewColumnDataEventArgs e)
        {
            if (e.Column.FieldName == "Total")
            {
                decimal fob_me = (decimal)e.GetListSourceFieldValue("fob_me");
                decimal cant_sug_real = (decimal)e.GetListSourceFieldValue("cant_sug_real");
                e.Value = fob_me * cant_sug_real;
            }
        }

        protected void btnDetalle_Click(object sender, EventArgs e)
        {
            if (tmpArticulosNoInsertados.Count > 0)
            {
                grdDatosNoRegistrados.DataSource = tmpArticulosNoInsertados;
                grdDatosNoRegistrados.DataBind();
            }
            gvExporterArticulosNoRegistrados.WriteXlsToResponse();
        }


        [Serializable]
        public sealed class RSCredentials : IReportServerCredentials
        {
            public WindowsIdentity ImpersonationUser
            {
                get { return null; }
            }

            public ICredentials NetworkCredentials
            {
                get
                {
                    string userName = ConfigurationManager.AppSettings[DatosConfiguracion.RsUser];
                    string password = ConfigurationManager.AppSettings[DatosConfiguracion.RsPassword];
                    string domain = ConfigurationManager.AppSettings[DatosConfiguracion.RsDomain];

                    return new NetworkCredential(userName, password, domain);
                }
            }

            public bool GetFormsCredentials(out Cookie authCookie, out String userName, out String password,
                out String authority)
            {
                authCookie = null;
                userName = null;
                password = null;
                authority = null;
                return false;
            }
        }




    }

}